package wzc.design_pattern.behaviour.template;

/**
 * @Author 那和不是个啥
 * @Date 2025/7/20
 * @Description
 */

public abstract class Beverage {
    // 模板方法：定义了制作饮料的算法骨架
    public final void prepareRecipe() {
        boilWater();
        brew();
        pourInCup();
        if (hook()) {
            addCondiments();  // 具体步骤由子类实现
        }
    }

    // 公共步骤：烧水
    private void boilWater() {
        System.out.println("烧开水");
    }

    // 公共步骤：倒入杯中
    private void pourInCup() {
        System.out.println("倒入杯中");
    }

    // 步骤2：冲泡，子类必须实现
    protected abstract void brew();

    // 步骤4：添加调料，子类必须实现
    protected abstract void addCondiments();

    // 钩子方法：可以让子类决定是否添加调料
    protected boolean hook() {
        // 默认返回true，可以被子类覆盖
        return true;
    }
}
